Skip to content

feat: add mcp_servers field to app manifest#580

Merged
zimeg merged 3 commits into
mainfrom
feat/add-mcp-servers-manifest-field
Jun 10, 2026
Merged

feat: add mcp_servers field to app manifest#580
zimeg merged 3 commits into
mainfrom
feat/add-mcp-servers-manifest-field

Conversation

@zimeg

@zimeg zimeg commented Jun 4, 2026

Copy link
Copy Markdown
Member

Changelog

🔍 Note: This might appear perhaps before rollout completes but tooling hopes to support MCP throughout this process with changes as needed.

The mcp_server manifest fields are supported for connecting MCP servers to Slack.

Summary

This pull request adds the mcp_servers field to the app manifest struct, so apps can make MCP server connections available.

Supported fields:

  • url: Required. HTTPS endpoint of the MCP server
  • auth_provider_key: Optional. Reference to an external_auth_providers entry for OAuth
  • auth_type: Required. Authentication method - no_auth, slack_identity_auth, manual_auth, or dynamic_client_registration

Schema definition: slackapi/manifest-schema#71

Testing

With the mcp:connect scope included please confirm the following manifests are installed as expected or that all values appear with:

$ slack manifest
No authentication
{
  "display_information": {
    "name": "MCP Docs Server",
    "description": "Serves public Slack documentation from MCP"
  },
  "features": {
    "bot_user": {
      "display_name": "MCP Docs Server",
      "always_online": true
    }
  },
  "oauth_config": {
    "scopes": {
      "bot": ["mcp:connect"]
    }
  },
  "settings": {
    "org_deploy_enabled": true,
    "socket_mode_enabled": false,
    "token_rotation_enabled": false
  },
  "mcp_servers": {
    "docs": {
      "url": "https://88bf-170-39-168-237.ngrok-free.app/mcp",
      "auth_type": "no_auth"
    }
  }
}
Slack-identity authentication
{
  "display_information": {
    "name": "MCP Profile Card",
    "description": "Looks up Slack user profiles using Slack identity auth"
  },
  "features": {
    "app_home": {},
    "bot_user": {
      "display_name": "MCP Profile Card",
      "always_online": true
    }
  },
  "oauth_config": {
    "redirect_urls": [
      "https://88bf-170-39-168-237.ngrok-free.app/slack/oauth_redirect"
    ],
    "scopes": {
      "bot": [
        "mcp:connect",
        "users:read",
        "users:read.email"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": false,
    "org_deploy_enabled": true,
    "token_rotation_enabled": false
  },
  "mcp_servers": {
    "profile": {
      "url": "https://88bf-170-39-168-237.ngrok-free.app/mcp",
      "auth_type": "slack_identity_auth"
    }
  }
}
Standard OAuth handshakes
{
  "display_information": {
    "name": "MCP GitHub Server",
    "description": "Connects to GitHub with External Auth Provider"
  },
  "features": {
    "app_home": {},
    "bot_user": {
      "display_name": "MCP GitHub Server",
      "always_online": true
    }
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "mcp:connect"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": false,
    "org_deploy_enabled": true,
    "token_rotation_enabled": false
  },
  "external_auth_providers": {
    "oauth2": {
      "github": {
        "provider_type": "CUSTOM",
        "options": {
          "client_id": "YOUR_GITHUB_CLIENT_ID",
          "scope": [],
          "provider_name": "GitHub",
          "authorization_url": "https://github.com/login/oauth/authorize",
          "token_url": "https://github.com/login/oauth/access_token",
          "identity_config": {
            "url": "https://api.github.com/user",
            "account_identifier": "$.login"
          },
          "use_pkce": false,
          "token_url_config": {
            "use_basic_auth_scheme": false
          }
        }
      }
    }
  },
  "mcp_servers": {
    "github": {
      "url": "https://api.githubcopilot.com/mcp/",
      "auth_provider_key": "github",
      "auth_type": "manual_auth"
    }
  }
}
Dynamic client registration
{
  "display_information": {
    "name": "MCP Notion Server",
    "description": "Connects to Notion with Dynamic Client Registration"
  },
  "features": {
    "bot_user": {
      "display_name": "MCP Notion Server",
      "always_online": true
    }
  },
  "oauth_config": {
    "scopes": {
      "bot": ["mcp:connect"]
    }
  },
  "settings": {
    "org_deploy_enabled": true,
    "socket_mode_enabled": false,
    "token_rotation_enabled": false
  },
  "mcp_servers": {
    "notion": {
      "url": "https://mcp.notion.com/mcp",
      "auth_type": "dynamic_client_registration"
    }
  }
}

Notes

  • The external_auth_providers field already exists and mcp_servers references auth_provider_key using these values
  • The use_pkce and token_url_config fields added in the schema PR are already supported here since oauth2 provider options use a passthrough *RawJSON value

Requirements

Support MCP server configuration in the app manifest with url,
auth_provider_key, and auth_type fields for Slack MCP Client integration.

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>
@codecov

codecov Bot commented Jun 4, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 71.66%. Comparing base (e37243b) to head (1538e8e).
⚠️ Report is 4 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #580      +/-   ##
==========================================
+ Coverage   71.64%   71.66%   +0.02%     
==========================================
  Files         226      226              
  Lines       19148    19148              
==========================================
+ Hits        13718    13723       +5     
+ Misses       4221     4218       -3     
+ Partials     1209     1207       -2     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@zimeg zimeg self-assigned this Jun 9, 2026
@zimeg zimeg added enhancement M-T: A feature request for new functionality changelog Use on updates to be included in the release notes semver:minor Use on pull requests to describe the release version increment labels Jun 9, 2026
@zimeg zimeg marked this pull request as ready for review June 9, 2026 16:43
@zimeg zimeg requested a review from a team as a code owner June 9, 2026 16:43
@zimeg zimeg added this to the Next Release milestone Jun 9, 2026

@srtaalej srtaalej left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks great!! mcp_servers serializing correctly ⭐

@zimeg

zimeg commented Jun 10, 2026

Copy link
Copy Markdown
Member Author

@srtaalej Thanks for taking this for a test as well! I'll merge it now for an upcoming release.

@zimeg zimeg merged commit 37b8a53 into main Jun 10, 2026
10 checks passed
@zimeg zimeg deleted the feat/add-mcp-servers-manifest-field branch June 10, 2026 23:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

changelog Use on updates to be included in the release notes enhancement M-T: A feature request for new functionality semver:minor Use on pull requests to describe the release version increment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants